<template>
    <div class="person">
        <h2>姓名: {{ person.name }}</h2>
        <h2>年龄: {{ person.age }}</h2>
        <h2>年龄2: {{ age2 }}</h2>
        <button @click="changeName">修改名字</button>
        <button @click="changeAge">修改年龄</button>
    </div>
</template>

<script lang="ts">
export default {
    name: 'Person',
}
</script>

<script setup lang="ts">
import { ref, reactive, toRef, toRefs } from 'vue'

// reactive的局限性: 不支持整体修改
let person = reactive({
    name: '张三',
    age: 18,
})
// 这样解构出来的字段不是响应式的
// let { name, age } = person

// toRefs 接受一个reactive响应对象,并将其中的每一个kv拿出来形成一个新的对象
let { name, age } = toRefs(person)

let age2 = toRef(person, "age")

function changeName() {
    // person.name += '~' // 页面有变化
    // name += '~' // 直接解构页面无变化
    name.value += '~'
}
function changeAge() {
    // person.age += 1 页面有变化
    // age += 1 // 直接解构页面无变化
    age2.value++
}


</script>

<style scoped>
.person {
    background-color: skyblue;
    box-shadow: 0 0 10px;
    border-radius: 10px;
    padding: 20px;
}

button {
    margin: 0 2px;
}

li {
    font-size: 15px;
}
</style>